// 路由拦截，必须引入router
import router from '@/router'
import store from '@/store'

const whiteList = ['/login', '/404']

// 模拟的调用,目的看到action的效果
// setTimeout(() => {
//   store.dispatch('user/getUserInfo')
// }, 500)
// 权限的拦截

// 需求：获取用户资料
// 1、获取的先决条件是：必须有token
// 2、获取资料还要去判断，个人信息是否已经存在了，如果已经存在没有必要获取
// 3、如果有token，但是用户资料不存在的时候才去获取用户资料
router.beforeEach(async function(to, from, next) {
// 1、判断是否有token
  const token = store.getters.token
  if (token) {
    // 只有代码走到这里，才说明有token
    // 判断当前用户是否已经获取过个人信息了
    // 根据userId判断用户是否获取过资料
    const userId = store.getters.userId
    if (!userId) {
      //  获取用户资料
      //  触发获取用户信息的action
      await store.dispatch('user/getUserInfo')
    }

    // 如果已经登陆了，但是又要去登录界面，重定向到主页
    // 但是没有去登录界面，直接放行
    if (to.path === '/login') {
      next('/')
    } else {
      next()
    }
  } else {
    // 如果没有登录，判断去的是不是白名单界面，如果是，直接放行
    if (whiteList.includes(to.path)) {
      next()
    } else {
      //  去的时候需要权限的界面
      // 重定向到登录界面
      next('/login')
    }
  }
})

// 多学一定是对自己好的，
// 前期入行了之后有了经验可以再去转行
